/**
 * 配置中心使用示例
 * 
 * 展示如何在不同场景下使用配置中心
 * 
 * @author AI Assistant
 * @date 2025-11-27
 */

import { GameConfig, configManager, isDevelopment, getEnvironmentConfig } from './index';
import { Log } from '../core/logger/LoggerGlobal';

// ============================================================================
// 示例 1：游戏初始化时使用配置
// ============================================================================

export function exampleGameInitialization() {
    Log.styled('━'.repeat(60), 'separator');
    Log.styled('📚 示例 1: 游戏初始化', 'title');
    Log.styled('━'.repeat(60), 'separator');
    
    // 1. 初始化配置管理器
    configManager.init();
    
    // 2. 使用配置初始化各个系统
    
    // 固定更新管理器
    const logicFPS = GameConfig.Performance.LOGIC_FPS;
    const maxDelta = GameConfig.Performance.MAX_DELTA_TIME;
    Log.ecs.info('固定更新配置', { logicFPS, maxDelta });
    
    // 场景协调器
    const layers = GameConfig.Scene.DEFAULT_LAYERS;
    Log.scene.info('场景层级配置', { layerCount: layers.length });
    
    // ECS 系统
    const entityPoolSize = GameConfig.ECS.ENTITY_POOL_SIZE;
    Log.ecs.info('ECS 配置', { entityPoolSize });
    
    Log.styled('✅ 初始化完成', 'success');
}

// ============================================================================
// 示例 2：运行时修改配置
// ============================================================================

export function exampleRuntimeOverride() {
    Log.styled('━'.repeat(60), 'separator');
    Log.styled('📚 示例 2: 运行时修改配置', 'title');
    Log.styled('━'.repeat(60), 'separator');
    
    // 打印原始配置
    Log.general.info('原始逻辑帧率', {
        fps: configManager.getValue('Performance', 'LOGIC_FPS')
    });
    
    // 覆盖配置
    configManager.override({
        Performance: {
            LOGIC_FPS: 30,
            RENDER_FPS: 120
        },
        Debug: {
            SHOW_FPS: true,
            SHOW_ENTITY_COUNT: true
        }
    });
    
    // 打印修改后的配置
    Log.general.info('修改后逻辑帧率', {
        fps: configManager.getValue('Performance', 'LOGIC_FPS')
    });
    
    // 验证配置
    if (configManager.validate()) {
        Log.styled('✅ 配置验证通过', 'success');
    } else {
        Log.styled('❌ 配置验证失败', 'highlight');
    }
}

// ============================================================================
// 示例 3：环境配置
// ============================================================================

export function exampleEnvironmentConfig() {
    Log.styled('━'.repeat(60), 'separator');
    Log.styled('📚 示例 3: 环境配置', 'title');
    Log.styled('━'.repeat(60), 'separator');
    
    // 获取环境配置
    const envConfig = getEnvironmentConfig();
    
    Log.general.info('环境配置', {
        serverUrl: envConfig.serverUrl,
        logLevel: envConfig.logLevel,
        enableDebug: envConfig.enableDebug
    });
    
    // 环境判断
    if (isDevelopment()) {
        Log.styled('🔧 当前为开发环境', 'highlight');
        
        // 开发环境特有逻辑
        enableDevTools();
        enableHotReload();
        enableGMCommands();
    } else {
        Log.general.info('生产环境，调试功能已关闭');
    }
}

// ============================================================================
// 示例 4：配置持久化
// ============================================================================

export function exampleConfigPersistence() {
    Log.styled('━'.repeat(60), 'separator');
    Log.styled('📚 示例 4: 配置持久化', 'title');
    Log.styled('━'.repeat(60), 'separator');
    
    // 修改配置
    configManager.override({
        Audio: {
            MASTER_VOLUME: 0.8,
            BGM_VOLUME: 0.5
        },
        GameRule: {
            PLAYER_MOVE_SPEED: 300
        }
    });
    
    // 保存到本地存储
    configManager.saveToLocalStorage();
    Log.styled('✅ 配置已保存', 'success');
    
    // 下次启动时会自动加载
    // configManager.init() 会自动调用 loadPersistedConfig()
}

// ============================================================================
// 示例 5：调试面板集成
// ============================================================================

export class ConfigDebugPanel {
    /**
     * 显示配置面板
     */
    show(): void {
        Log.styled('━'.repeat(60), 'separator');
        Log.styled('⚙️  配置调试面板', 'title');
        Log.styled('━'.repeat(60), 'separator');
        
        // 打印所有配置
        this.printAllConfig();
        
        // 提供修改接口
        this.setupConfigControls();
    }
    
    /**
     * 打印所有配置
     */
    private printAllConfig(): void {
        const config = configManager.getAllConfig();
        
        Log.styled('📊 性能配置', 'large');
        Log.performance.info(`逻辑帧率: ${config.Performance.LOGIC_FPS} FPS`);
        Log.performance.info(`渲染帧率: ${config.Performance.RENDER_FPS} FPS`);
        Log.performance.info(`插值渲染: ${config.Performance.ENABLE_INTERPOLATION ? '开启' : '关闭'}`);
        
        Log.styled('🎨 场景配置', 'large');
        Log.scene.info(`层级数量: ${config.Scene.DEFAULT_LAYERS.length}`);
        Log.scene.info(`场景缓存: ${config.Scene.ENABLE_SCENE_CACHE ? '开启' : '关闭'}`);
        
        Log.styled('🔊 音频配置', 'large');
        Log.audio.info(`主音量: ${config.Audio.MASTER_VOLUME}`);
        Log.audio.info(`BGM 音量: ${config.Audio.BGM_VOLUME}`);
        Log.audio.info(`音效音量: ${config.Audio.SFX_VOLUME}`);
        
        Log.styled('🐛 调试配置', 'large');
        Log.general.info(`调试模式: ${config.Debug.ENABLE_DEBUG ? '开启' : '关闭'}`);
        Log.general.info(`显示 FPS: ${config.Debug.SHOW_FPS ? '是' : '否'}`);
        Log.general.info(`GM 命令: ${config.Debug.ENABLE_GM_COMMANDS ? '开启' : '关闭'}`);
    }
    
    /**
     * 设置配置控制（暴露到全局）
     */
    private setupConfigControls(): void {
        // 方便在浏览器控制台调试
        (window as any).gameConfig = {
            // 设置逻辑帧率
            setLogicFPS: (fps: number) => {
                configManager.override({ Performance: { LOGIC_FPS: fps } });
                Log.styled(`✅ 逻辑帧率已设置为 ${fps}`, 'success');
            },
            
            // 切换调试模式
            toggleDebug: () => {
                const current = configManager.getValue('Debug', 'ENABLE_DEBUG');
                configManager.override({ Debug: { ENABLE_DEBUG: !current } });
                Log.styled(`✅ 调试模式: ${!current ? '开启' : '关闭'}`, 'success');
            },
            
            // 设置音量
            setVolume: (volume: number) => {
                configManager.override({ Audio: { MASTER_VOLUME: volume } });
                Log.styled(`✅ 主音量已设置为 ${volume}`, 'success');
            },
            
            // 打印当前配置
            print: () => {
                configManager.printCurrentConfig();
            },
            
            // 重置配置
            reset: () => {
                configManager.resetOverrides();
                Log.styled('✅ 配置已重置', 'success');
            },
            
            // 保存配置
            save: () => {
                configManager.saveToLocalStorage();
                Log.styled('✅ 配置已保存', 'success');
            }
        };
        
        Log.styled('💡 调试命令已注册到 window.gameConfig', 'highlight');
        Log.general.info('可用命令:');
        Log.general.info('  - gameConfig.setLogicFPS(fps)');
        Log.general.info('  - gameConfig.toggleDebug()');
        Log.general.info('  - gameConfig.setVolume(volume)');
        Log.general.info('  - gameConfig.print()');
        Log.general.info('  - gameConfig.reset()');
        Log.general.info('  - gameConfig.save()');
    }
}

// ============================================================================
// 示例 6：根据配置初始化系统
// ============================================================================

export function exampleSystemInitialization() {
    Log.styled('━'.repeat(60), 'separator');
    Log.styled('📚 示例 6: 系统初始化', 'title');
    Log.styled('━'.repeat(60), 'separator');
    
    // 初始化配置
    configManager.init();
    
    // 固定更新管理器配置
    const perfConfig = configManager.get('Performance');
    Log.ecs.info('配置固定更新管理器', {
        logicFPS: perfConfig.LOGIC_FPS,
        renderFPS: perfConfig.RENDER_FPS,
        interpolation: perfConfig.ENABLE_INTERPOLATION
    });
    
    // ECS 配置
    const ecsConfig = configManager.get('ECS');
    if (ecsConfig.WARMUP_POOLS) {
        Log.ecs.info('预热对象池', {
            entityCount: ecsConfig.WARMUP_ENTITY_COUNT,
            componentCount: ecsConfig.WARMUP_COMPONENT_COUNT
        });
    }
    
    // 资源配置
    const resConfig = configManager.get('Resource');
    if (resConfig.ENABLE_PRELOAD) {
        Log.resource.info('启用资源预加载', {
            prefabCache: resConfig.PREFAB_CACHE_SIZE,
            textureCache: resConfig.TEXTURE_CACHE_SIZE
        });
    }
    
    Log.styled('✅ 系统初始化配置完成', 'success');
}

// ============================================================================
// 辅助函数
// ============================================================================

function enableDevTools() {
    Log.general.info('开发工具已启用');
}

function enableHotReload() {
    Log.general.info('热重载已启用');
}

function enableGMCommands() {
    Log.general.info('GM 命令已启用');
}

/**
 * 运行所有示例
 */
export function runAllConfigExamples() {
    Log.styled('━'.repeat(60), 'separator');
    Log.styled('🎯 配置中心使用示例', 'title');
    Log.styled('━'.repeat(60), 'separator');
    
    exampleGameInitialization();
    exampleRuntimeOverride();
    exampleEnvironmentConfig();
    exampleConfigPersistence();
    exampleSystemInitialization();
    
    // 启动调试面板
    const debugPanel = new ConfigDebugPanel();
    debugPanel.show();
    
    Log.styled('━'.repeat(60), 'separator');
    Log.styled('✅ 所有示例运行完成', 'success');
    Log.styled('━'.repeat(60), 'separator');
}

/**
 * 如何运行示例：
 * 
 * 在浏览器控制台或游戏代码中：
 * 
 * ```typescript
 * import { runAllConfigExamples } from '../config/ConfigExample';
 * runAllConfigExamples();
 * 
 * // 或单独运行某个示例
 * import { exampleRuntimeOverride } from '../config/ConfigExample';
 * exampleRuntimeOverride();
 * ```
 */

